package com.syt.cellphone.information.ui.main

import android.app.Application
import com.syt.cellphone.information.App
import com.syt.cellphone.information.base.BaseViewModel
import com.syt.cellphone.information.constant.EventBus
import com.syt.cellphone.information.http.RequestHelp
import com.syt.cellphone.information.http.doFailure
import com.syt.cellphone.information.http.doSuccess
import com.syt.cellphone.information.utils.postEvent
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.collectLatest

/**
 *  @author: syt
 *  创建时间: 2020/8/24 15:32
 *  @功能   主mv
 *  @version v1.0
 */
class MainViewModel(application: Application) : BaseViewModel(application) {

    /**
     * 默认页号
     */
    private var pageNumber = 1

    /**
     * 更新基础数据列表的数据
     */
    fun upBasePhoneList() {
        execute {
            RequestHelp.getBaseListPhone(pageNumber)
                .collectLatest {value ->
                    value.doSuccess {
                        App.db.phoneBaseDao().insert(
                            *it.list.toTypedArray()
                        )
                        // 发送更新成功消息
                        postEvent(EventBus.UP_PHONE, it.list)
                    }
                    value.doFailure {
                        toast(it.toString())
                    }
                }
        }
    }

    /**
     * 重新加载基础数据
     */
    fun refreshPhoneBaseList() {
        execute {
            pageNumber = 1
            RequestHelp.getBaseListPhone(pageNumber)
                .catch {
                    // 异常处理
                    toast(it.message)
                }
                .collectLatest { value ->
                    value.doSuccess {
                        // 清空内存
                        App.db.phoneBaseDao().deleteData()
                        App.db.phoneBaseDao().insert(
                            *it.list.toTypedArray()
                        )
                        // 发送更新成功消息
                        postEvent(EventBus.UP_PHONE, it.list)
                    }
                    value.doFailure {
                        toast(it.toString())
                    }
                }
        }
    }

    /**
     * 加载新手机基础数据
     */
    fun loadMorePhoneBaseList() {
        execute {
            pageNumber++
            RequestHelp.getBaseListPhone(pageNumber)
                .catch {
                    // 异常处理
                    toast(it.message)
                }
                .collectLatest { value ->
                    value.doSuccess {
                        App.db.phoneBaseDao().insert(
                            *it.list.toTypedArray()
                        )
                        // 发送更新成功消息
                        postEvent(EventBus.UP_PHONE, it.list)
                    }
                    value.doFailure {
                        toast(it.toString())
                    }
                }
        }
    }

}